<?php


namespace app\back\model;


use \Exception;
use think\facade\Db;
use think\response\Json;

class OrgModel
{
    private static $_table = 'organization'; // 机构表
//    private static $_adminTable = 'admin'; // 管理员表
//    private static $_roleTable = 'role'; // 司机表
//    private static $_driverRouteTable = 'driver_route'; // 司机路线表

    /**获取机构列表
     * @param $input
     * @param $info
     * @return Json
     */
    public static function getOrgList($input, $info)
    {
        try {
            $map = [
                ['admin_id', '=', $info['id']]
            ];
            if ($input['status'] !== '') {
                $map[] = ['status', '=', $input['status']];
            } else {
                $map[] = ['status', 'in', [1,2]];
            }
            if ($input['name'] !== '') $map[] = ['name', 'like', "%{$input['name']}%"];
            $field = 'id,name,status,create_time,longitude,latitude,province,city,area,address,detail';
            $table = Db::table(self::$_table)->alias('o')
                ->where($map)->field($field);
            $count = $table->count();
            if ($count == 0) return jsonSuccess('暂无数据', ['count' => 0,'list' => []]);
            $list = $table->page($input['page'], $input['limit'])->order('create_time', 'desc')->select()->toArray();
            return jsonSuccess('获取成功', ['count' => $count, 'list' => $list]);
        } catch (Exception $e) {
            return jsonFail('服务内部错误~');
        }
    }

    /**添加分拣中心
     * @param $input
     * @param $info
     * @return Json
     */
    public static function addOrg($input,$info)
    {
        try {
            $input['admin_id'] = $info['id'];
            $input['create_time'] = time();
            $rtn = Db::table(self::$_table)->insert($input);
            if ($rtn) return jsonSuccess('添加成功');
            return jsonFail('添加失败');
        } catch (Exception $e) {
            return jsonFail('服务内部错误~');
        }
    }

    /**修改机构状态
     * @param $input
     * @param $info
     * @return Json
     */
    public static function changeOrgStatus($input,$info)
    {
        try {
            // 获取当前信息
            $orgInfo = Db::table(self::$_table)->field('admin_id,status')->where('id', $input['id'])->find();
            if (!$orgInfo) return jsonFail('未找到机构信息');
            if ($orgInfo['admin_id'] != $info['id']) return jsonFail('该机构非您直接管理，您没有权限操作');
            if ($orgInfo['status'] == 3) return jsonFail('该机构已删除无法继续操作');
            // 根据不同status执行不同操作
            $update = [
                'status' => $input['status']
            ];
            $map = [
                ['id', '=', $input['id']],
                ['admin_id', '=', $info['id']],
                ['status','=', $input['status'] == 1? 2:1]
            ];
            $rtn = Db::table(self::$_table)->where($map)->update($update);
            if (!$rtn) {
                return  jsonFail('操作失败,请点击刷新按钮重新查看');
            }
            return jsonSuccess('修改成功');
        } catch (Exception $e) {
            return jsonFail('服务内部错误~');
        }
    }

    /**删除机构（软删除）
     * @param $input
     * @param $info
     * @return Json
     */
    public static function delOrg($input,$info)
    {
        try {
            // 获取当前信息
            $orgInfo = Db::table(self::$_table)->field('admin_id,status')->where('id', $input['id'])->find();
            if (!$orgInfo) return jsonFail('未找到机构信息');
            if ($orgInfo['admin_id'] != $info['id']) return jsonFail('该机构非您直接管理，您没有权限操作');
            if ($orgInfo['status'] == 3) return jsonFail('该机构已删除无法继续操作');
            // 根据不同status执行不同操作
            $map = [
                ['id', '=', $input['id']],
                ['admin_id', '=', $info['id']],
                ['status','in', [1,2]]
            ];
            $rtn = Db::table(self::$_table)->where($map)->update(['status' => 3]);
            if (!$rtn) {
                return  jsonFail('操作失败,请点击刷新按钮重新查看');
            }
            return jsonSuccess('删除成功');
        } catch (Exception $e) {
            return jsonFail('服务内部错误~');
        }
    }

    /**获取单个机构信息
     * @param $input
     * @param $info
     * @return Json
     */
    public static function getOrgOnly($input,$info)
    {
        try {
            // 获取当前信息
            $orgInfo = Db::table(self::$_table)->field('id,admin_id,name,longitude,latitude,province,city,area,address,detail,status')->where('id', $input['id'])->find();
            if (!$orgInfo) return jsonFail('未找到机构信息');
            if ($orgInfo['admin_id'] != $info['id']) return jsonFail('该机构非您直接管理，您没有权限操作');
            if ($orgInfo['status'] == 3) return jsonFail('该机构已删除无法继续操作');
            unset($orgInfo['admin_id']);
            unset($orgInfo['status']);
            return jsonSuccess('获取成功', ['info' => $orgInfo]);
        } catch (Exception $e) {
            return jsonFail('服务内部错误~');
        }
    }

//    /**获取有效的管理员列表
//     * @param $info
//     * @return Json
//     */
//    public static function getAdmin($info)
//    {
//        try {
//            // 获取当前信息
//            $map = [
//                ['a.pid', '=', $info['id']],
//                ['a.status', '=', 1]
//            ];
//            $rtn = Db::table(self::$_adminTable)->alias('a')
//                ->leftJoin([self::$_roleTable => 'r'], 'r.id = a.role_id')
//                ->field('a.id,r.name as role_name,a.name')
//                ->where($map)
//                ->select()->toArray();
//            if ($rtn) return jsonSuccess('获取成功',$rtn);
//            return jsonFail('获取失败');
//        } catch (Exception $e) {
//            return jsonFail('服务内部错误~');
//        }
//    }

    /**编辑机构
     * @param $input
     * @param $info
     * @return Json
     */
    public static function editOrg($input,$info)
    {
        try {
            // 获取当前信息
            $orgInfo = Db::table(self::$_table)->field('admin_id,status')->where('id', $input['id'])->find();
            if (!$orgInfo) return jsonFail('未找到机构信息');
            if ($orgInfo['admin_id'] != $info['id']) return jsonFail('该机构非您直接管理，您没有权限操作');
            if ($orgInfo['status'] == 3) return jsonFail('该机构已删除无法继续操作');

            $rtn = Db::table(self::$_table)->update($input);
            if ($rtn) return jsonSuccess('操作成功');
            return jsonFail('操作失败,请点击刷新按钮重新查看');
        } catch (Exception $e) {
            return jsonFail('服务内部错误~');
        }
    }

//    /**绑定司机
//     * @param $input
//     * @param $info
//     * @return Json
//     */
//    public static function bindDriver($input, $info)
//    {
//        $flag = true;
//        try {
//            $map = [
//                ['id', '=', $input['id']],
//                ['admin_id', '=', $info['id']]
//            ];
//            $table = self::$_adminTable;
//            $sql = "select id from `{$table}` where id = {$input['driver_id']} and status = 1";
//            Db::startTrans();
//            $flag = true;
//            $rtn = Db::table(self::$_table)->where($map)->whereExists($sql)->update(['driver_id' => $input['driver_id']]);
//            if (!$rtn) {
//                Db::rollback();
//                return jsonFail('绑定失败，刷新页面重试');
//            }
//            // 添加路线
//            $rtn = Db::table(self::$_driverRouteTable)->insert([
//                'driver_id' => $input['driver_id'],
//                'move_id' => $input['id'],
//                'type' => 1
//            ]);
//            if (!$rtn) {
//                Db::rollback();
//                return jsonFail('绑定失败，刷新页面重试');
//            }
//            Db::commit();
//            return jsonSuccess('绑定成功');
//        } catch (Exception $e) {
//            if ($flag == true) Db::rollback();
//            return jsonFail('服务内部错误~');
//        }
//    }
//
//    /**解绑司机
//     * @param $input
//     * @param $info
//     * @return Json
//     */
//    public static function unbindDriver($input, $info)
//    {
//        $flag = true;
//        try {
//            $map = [
//                ['id', '=', $input['id']],
//                ['admin_id', '=', $info['id']],
//                ['driver_id', '=', $input['driver_id']]
//            ];
//            Db::startTrans();
//            $flag = true;
//            $rtn = Db::table(self::$_table)->where($map)->update(['driver_id' => 0]);
//            if (!$rtn) {
//                Db::rollback();
//                return jsonFail('解绑失败，刷新页面重试1');
//            }
//            // 删除司机路线
//            $map = [
//                ['move_id', '=', $input['id']],
//                ['driver_id', '=', $input['driver_id']],
//                ['type', '=', 1]
//            ];
//            $rtn = Db::table(self::$_driverRouteTable)->where($map)->delete();
//            if ($rtn != 1) {
//                Db::rollback();
//                return jsonFail('解绑失败，刷新页面重试2');
//            }
//            Db::commit();
//            return jsonSuccess('解绑成功');
//        } catch (Exception $e) {
//            if ($flag == true) Db::rollback();
//            return jsonFail('服务内部错误~');
//        }
//    }
}